///////////////////////////////
// Analizador sintáctico GDL
///////////////////////////////

parser grammar AnasintGDL;

options {
  language = Java;
  tokenVocab = AnalexGDL;
}

@header {
  package practpl.seis;
}

@members {
     private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
     public ArrayList<RecognitionException> getErrors() {
        return errors;
     }
     @Override
     public void reportError (RecognitionException e) {
        String msg = getErrorMessage(e, getTokenNames());
        System.err.println(msg);
        errors.add(e);
     }
}

entrada: GRAPH COLON LLAVEA (nodo | arista)* LLAVEC;

//grafo: GRAPH COLON LLAVEA (nodo | arista)* LLAVEC;

nodo: NODE COLON LLAVEA (titulo | etiqueta) (titulo | etiqueta) (borderstyle)? LLAVEC;
arista: EDGE COLON LLAVEA (origen | destino | arrowstyle) (origen | destino | arrowstyle) (origen | destino | arrowstyle)? LLAVEC;

titulo: TITLE COLON DATO;
etiqueta: LABEL COLON DATO;

origen: SOURCE COLON DATO;
destino: TARGET COLON DATO;

borderstyle: BORDERSTYLE COLON (SOLID | DASHED | DOTTED);
arrowstyle: ARROWSTYLE COLON (SOLID | LINE | NONE);